package fiuba.algo3.gpschallenge.gui;

import java.awt.Dimension;

import javax.swing.JOptionPane;
import javax.swing.JPanel;

import fiuba.algo3.gpschallenge.Controlador.Controlador;
import fiuba.algo3.gpschallenge.modelo.Juego;

import javax.swing.JButton;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.SystemColor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

public class PanelMenuDeUsuario extends JPanel {

	private final int ALTO = 350;
	private final int ANCHO = 700;
	private Juego modelo;
	private Controlador control;
	private Agregable interfazAgregable;

	public PanelMenuDeUsuario(Agregable interfazM, Juego modelo, Controlador control) {
		setBackground(Color.WHITE);
		interfazAgregable = interfazM;
		this.modelo = modelo;
		this.control = control;
		setPreferredSize(new Dimension(ANCHO, ALTO));
		setLayout(null);

		JButton btnComenzarPartida = new JButton("Comenzar Partida");
		btnComenzarPartida.setBackground(SystemColor.activeCaption);
		btnComenzarPartida.setForeground(Color.WHITE);
		btnComenzarPartida.setFont(new Font("Arial Black", Font.BOLD, 17));
		btnComenzarPartida.setBounds(194, 63, 295, 47);
		btnComenzarPartida.addActionListener(new botonComenzarPartidaListener());
		add(btnComenzarPartida);

		JButton btnRetomarPartidaGuardada = new JButton("Retomar Partida Guardada");
		btnRetomarPartidaGuardada.setForeground(Color.WHITE);
		btnRetomarPartidaGuardada.setFont(new Font("Arial Black", Font.BOLD, 15));
		btnRetomarPartidaGuardada.setBackground(SystemColor.activeCaption);
		btnRetomarPartidaGuardada.setBounds(194, 143, 295, 47);
		btnRetomarPartidaGuardada.addActionListener(new botonRetomarPartidaListener());
		add(btnRetomarPartidaGuardada);

		JButton btnVerPuntajes = new JButton("Ver Puntajes");
		btnVerPuntajes.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				cargarPanelPuntajes();
			}
		});
		btnVerPuntajes.setForeground(Color.WHITE);
		btnVerPuntajes.setFont(new Font("Arial Black", Font.BOLD, 15));
		btnVerPuntajes.setBackground(SystemColor.activeCaption);
		btnVerPuntajes.setBounds(194, 219, 295, 47);
		add(btnVerPuntajes);


	}


	private void cargarPanelJuegoNuevo() {
		interfazAgregable.limpiarVentana();
		PanelSuperiorNuevoJuego panelSuperiorNuevoJuego = new PanelSuperiorNuevoJuego(this.interfazAgregable, this.modelo, this.control);	
		PanelJuegoNuevo panelJuegoNuevo = new PanelJuegoNuevo(this.interfazAgregable, this.modelo, this.control);
		interfazAgregable.agregarComponente(panelSuperiorNuevoJuego, BorderLayout.NORTH);
		interfazAgregable.agregarComponente(panelJuegoNuevo, BorderLayout.CENTER);
	}



	class botonComenzarPartidaListener implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e){
			cargarPanelJuegoNuevo();
		}
	}

	private void retomarPartida(){
		String nombreJugador = this.modelo.getJugador().getNombre();
		String rutaxmljugador = "./Datos/"+nombreJugador+"/"+nombreJugador+"-Mapa.dat";
		File archivoMapa = new File(rutaxmljugador);

		if (archivoMapa.isFile()){

			this.modelo.cargarjuego(this.modelo.getJugador().getNombre());
			this.control=new Controlador(modelo);
			cargarPanelDelJuego();

		}
		else {
			JOptionPane.showMessageDialog(null, "No se encuentra ninguna partida guardada.");
		}

	}

	class botonRetomarPartidaListener implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e){
			retomarPartida();
		}
	}

	private void cargarPanelDelJuego() {
		interfazAgregable.limpiarVentana();		
		PanelDelJuego panelDelJuego = new PanelDelJuego(this.interfazAgregable, this.modelo, this.control);
		PanelSuperiorJuego panelSuperiorJuego = new PanelSuperiorJuego(this.interfazAgregable, this.modelo, this.control);	
		PanelEstadoDelJuego panelEstadoDelJeguo = new PanelEstadoDelJuego(interfazAgregable, modelo, control);
		PanelPuntajeJuego panelPuntajeJuego = new PanelPuntajeJuego(interfazAgregable, modelo, control);
		interfazAgregable.agregarComponente(panelSuperiorJuego, BorderLayout.NORTH);
		interfazAgregable.agregarComponente(panelDelJuego, BorderLayout.CENTER);
		interfazAgregable.agregarComponente(panelEstadoDelJeguo, BorderLayout.WEST);
		interfazAgregable.agregarComponente(panelPuntajeJuego, BorderLayout.EAST);

	}

	public void cargarPanelPuntajes() {
		interfazAgregable.limpiarVentana();
		PanelSuperiorPuntajes panelSuperiorPuntajes = new PanelSuperiorPuntajes(this.interfazAgregable, this.modelo, this.control);
		PanelPuntajes panelPuntajes = new PanelPuntajes(this.interfazAgregable, this.modelo, this.control);
		interfazAgregable.agregarComponente(panelSuperiorPuntajes, BorderLayout.NORTH);
		interfazAgregable.agregarComponente(panelPuntajes, BorderLayout.CENTER);	
	}




}
